# @Version : 1.0
# @Author  : 刘宇
# @File    : bit_operator.py
# @Time    : 2025/9/30 17:04

# 位运算的案例
# 1.~:按位取反
print(~-2)  # 1
print(~2)  # -3

# 2.&:按位与
# 规则：参与运算的两个值，如果两个相应位都为1，则该位的结果为1，否则为0
print(2 & 3)  # 2

# 3.^:按位异或
# 规则：当两个对应的二进制相异时，结果为1
print(2 ^ 3)

# 4.|:按位或
# 规则：只要对应的两个二进位有一个为1时，结果位为1
print(2 | 3)
# 0000 0010
# 0000 0011
# 0000 0011

print(5 << 1)  # 10
# 0000 0101
# 0000 1010

print(-5 << 1)  # -10
# 1000 0101(原码)
# 1111 1010(反码)
# 1111 1011(补码)
# 1111 0110(左移后补码)
# 1111 0101(左移后反码)
# 1000 1010(左移后原码)


a = 1 >> 2
# 0000 0001
# 0000 0000
# 0
b = -1 >> 2
# 1000 0001
# 1111 1110
# 1111 1111
# 1111 1111
# 1111 1110
# 1000 0001
# -1

c = 1 << 2
# 0000 0001
# 0000 0100
# 4

d = -1 << 2
# 1000 0001
# 1111 1110
# 1111 1111
# 1111 1111
# 1111 1110
# 1000 0001
# -4

print(a, b, c, d)

print(~2)
# 0000 0010
# 1111 1101(补码)
# 1111 1100（反码）
# 1000 0011（原码）
# -3

print(2 & 3)
# 0000 0010
# 0000 0011
# 0000 0010
# 2

print(2 | 3)
# 0000 0010
# 0000 0011
# 0000 0011
# 3

print(~-5)
# 1000 0101
# 1111 1010
# 1111 1011
# 0000 0100
# 4

print(13 & 7)
# 0000 1101
# 0000 0111
# 0000 0101
# 5

print(5 | 4)
# 0000 0101
# 0000 0100
# 0000 0101
# 5

print(-3 ^ 3)
# 1000 0011
# 1111 1100
# 1111 1101(-3的补码)
# 0000 0011
# 1111 1110（按位异或后的补码）
# 1111 1101
# 1000 0010
# -2


